package co.edu.uniminuto.arqSw.videominuto.DAO;

import co.edu.uniminuto.arqSw.videominuto.Hibernate.CalificacionVideo;
import co.edu.uniminuto.arqSw.videominuto.Hibernate.Cliente;
import co.edu.uniminuto.arqSw.videominuto.Hibernate.ClienteCalificacion;
import co.edu.uniminuto.arqSw.videominuto.Hibernate.ClienteCalificacionId;
import co.edu.uniminuto.arqSw.videominuto.Hibernate.HibernateUtil;
import co.edu.uniminuto.arqSw.videominuto.Hibernate.Video;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;


public class VideoDatosDAO {
    Session session = null;

public VideoDatosDAO() {
this.session = HibernateUtil.getSessionFactory().openSession();                
}
public Video datosVideo(int Isan){

Video video = new Video();

try{ 
    Transaction tx = session.beginTransaction();
    tx.begin();
    Query q= session.createQuery("from Video v where v.isanVideo=:id");
    q.setParameter("id",Isan);
    video = (Video)q.uniqueResult();    
    tx.commit();
    
}catch(Exception e){
e.printStackTrace();
}
return video;
}
public String califica(Video vid){
String calificacion = null;
try{
Transaction tx = session.beginTransaction();
tx.begin();
Query q = session.createQuery("Select cc.tipo from CalificacionVideo cc where cc.idCalificacion=:id");
    q.setParameter("id",vid.getCalificacionMedia());
    calificacion=(String) q.uniqueResult();
    tx.commit();
}catch(Exception e){
e.printStackTrace();
}
return calificacion;
}

public ClienteCalificacion calificaciones(Video vid)
{
    ClienteCalificacion id = new ClienteCalificacion();
    try{
/*MAPEO MUY EXTRAÑO DE CLIENTE_CALIFICACION (SE GENERAN DOS POJOS:ClienteCalificacion y ClienteCalificacionId),
 * NO SE SABE COMO HACER UNA CONSULTA COUNT POR HQL O CRITERIA DEBIDO A ESTO

Transaction tx = session.beginTransaction();
tx.begin();

Criteria criteria =session.createCriteria(ClienteCalificacion.class);
criteria.add(Restrictions.gt("idCliente", 1));
criteria.setProjection(Projections.rowCount());
List t = criteria.list();

//Query q = session.createQuery("SELECT id Count(*) FROM ClienteCalificacion GROUP BY id");
Query q = session.createQuery("FROM ClienteCalificacion");

// q.setParameter("id",vid.getCalificacionMedia());

List temporal= q.list();
/* for(ClienteCalificacion c:temporal){
 System.out.println(c.getId().getIdCliente()+c.getId().getIdIsanVdi()+c.getCalificacionVideo().getTipo());
  }     
    //  calificacion=(String) q.uniqueResult();
    tx.commit();*/
    }
    catch(Exception e){
e.printStackTrace();
}
return id;
}


}
